@@ -15,6 +15,11 @@ gem "google-api-client" # GoogleCalendarPublishAgent |
||
15 | 15 |
gem 'mqtt' # MQTTAgent |
16 | 16 |
gem 'slack-notifier', '~> 0.5.0' # SlackAgent |
17 | 17 |
|
18 |
+# Twitter Agents |
|
19 |
+gem 'cantino-twitter-stream', github: 'cantino/twitter-stream', branch: 'master' |
|
20 |
+gem 'omniauth-twitter' |
|
21 |
+gem 'twitter', '~> 5.8.0' |
|
22 |
+ |
|
18 | 23 |
# Optional Services. |
19 | 24 |
gem 'omniauth-37signals' # BasecampAgent |
20 | 25 |
# gem 'omniauth-github' |
@@ -31,7 +36,6 @@ gem 'protected_attributes', '~>1.0.8' # This must be loaded before some other ge |
||
31 | 36 |
gem 'ace-rails-ap', '~> 2.0.1' |
32 | 37 |
gem 'bootstrap-kaminari-views', '~> 0.0.3' |
33 | 38 |
gem 'bundler', '>= 1.5.0' |
34 |
-gem 'cantino-twitter-stream', github: 'cantino/twitter-stream', branch: 'master' |
|
35 | 39 |
gem 'coffee-rails', '~> 4.0.0' |
36 | 40 |
gem 'daemons', '~> 1.1.9' |
37 | 41 |
gem 'delayed_job', '~> 4.0.0' |
@@ -57,14 +61,12 @@ gem 'mysql2', '~> 0.3.16' |
||
57 | 61 |
gem 'multi_xml' |
58 | 62 |
gem 'nokogiri', '~> 1.6.1' |
59 | 63 |
gem 'omniauth' |
60 |
-gem 'omniauth-twitter' |
|
61 | 64 |
gem 'rails' , '4.1.5' |
62 | 65 |
gem 'rufus-scheduler', '~> 3.0.8', require: false |
63 | 66 |
gem 'sass-rails', '~> 4.0.0' |
64 | 67 |
gem 'select2-rails', '~> 3.5.4' |
65 | 68 |
gem 'spectrum-rails' |
66 | 69 |
gem 'therubyracer', '~> 0.12.1' |
67 |
-gem 'twitter', '~> 5.8.0' |
|
68 | 70 |
gem 'typhoeus', '~> 0.6.3' |
69 | 71 |
gem 'uglifier', '>= 1.3.0' |
70 | 72 |
|
@@ -6,6 +6,8 @@ module TwitterConcern |
||
6 | 6 |
|
7 | 7 |
validate :validate_twitter_options |
8 | 8 |
valid_oauth_providers 'twitter' |
9 |
+ |
|
10 |
+ gem_dependency_check { defined?(Twitter) && has_oauth_configuration_for?('twitter') } |
|
9 | 11 |
end |
10 | 12 |
|
11 | 13 |
def validate_twitter_options |
@@ -41,4 +43,10 @@ module TwitterConcern |
||
41 | 43 |
config.access_token_secret = twitter_oauth_token_secret |
42 | 44 |
end |
43 | 45 |
end |
46 |
+ |
|
47 |
+ module ClassMethods |
|
48 |
+ def twitter_dependencies_missing |
|
49 |
+ "## Include the `twitter`, `omniauth-twitter`, and `cantino-twitter-stream` gems in your Gemfile to use Twitter Agents." |
|
50 |
+ end |
|
51 |
+ end |
|
44 | 52 |
end |
@@ -1,5 +1,3 @@ |
||
1 |
-require "twitter" |
|
2 |
- |
|
3 | 1 |
module Agents |
4 | 2 |
class TwitterPublishAgent < Agent |
5 | 3 |
include TwitterConcern |
@@ -7,6 +5,7 @@ module Agents |
||
7 | 5 |
cannot_be_scheduled! |
8 | 6 |
|
9 | 7 |
description <<-MD |
8 |
+ #{twitter_dependencies_missing if dependencies_missing?} |
|
10 | 9 |
The TwitterPublishAgent publishes tweets from the events it receives. |
11 | 10 |
|
12 | 11 |
To be able to use this Agent you need to authenticate with Twitter in the [Services](/services) section first. |
@@ -5,6 +5,7 @@ module Agents |
||
5 | 5 |
cannot_receive_events! |
6 | 6 |
|
7 | 7 |
description <<-MD |
8 |
+ #{twitter_dependencies_missing if dependencies_missing?} |
|
8 | 9 |
The TwitterStreamAgent follows the Twitter stream in real time, watching for certain keywords, or filters, that you provide. |
9 | 10 |
|
10 | 11 |
To follow the Twitter stream, provide an array of `filters`. Multiple words in a filter must all show up in a tweet, but are independent of order. |
@@ -1,5 +1,3 @@ |
||
1 |
-require "twitter" |
|
2 |
- |
|
3 | 1 |
module Agents |
4 | 2 |
class TwitterUserAgent < Agent |
5 | 3 |
include TwitterConcern |
@@ -7,6 +5,7 @@ module Agents |
||
7 | 5 |
cannot_receive_events! |
8 | 6 |
|
9 | 7 |
description <<-MD |
8 |
+ #{twitter_dependencies_missing if dependencies_missing?} |
|
10 | 9 |
The TwitterUserAgent follows the timeline of a specified Twitter user. |
11 | 10 |
|
12 | 11 |
To be able to use this Agent you need to authenticate with Twitter in the [Services](/services) section first. |
@@ -14,6 +14,7 @@ def safely(&block) |
||
14 | 14 |
rescue StandardError => e |
15 | 15 |
STDERR.puts "\nException #{e.message}:\n#{e.backtrace.join("\n")}\n\n" |
16 | 16 |
STDERR.puts "Terminating myself ..." |
17 |
+ STDERR.flush |
|
17 | 18 |
stop |
18 | 19 |
end |
19 | 20 |
end |
@@ -1,6 +1,5 @@ |
||
1 | 1 |
require 'cgi' |
2 | 2 |
require 'json' |
3 |
-require 'twitter/json_stream' |
|
4 | 3 |
require 'em-http-request' |
5 | 4 |
require 'pp' |
6 | 5 |
|
@@ -88,6 +87,14 @@ class TwitterStream |
||
88 | 87 |
SEPARATOR = /[^\w_\-]+/ |
89 | 88 |
|
90 | 89 |
def run |
90 |
+ if Agents::TwitterStreamAgent.dependencies_missing? |
|
91 |
+ STDERR.puts Agents::TwitterStreamAgent.twitter_dependencies_missing |
|
92 |
+ STDERR.flush |
|
93 |
+ return |
|
94 |
+ end |
|
95 |
+ |
|
96 |
+ require 'twitter/json_stream' |
|
97 |
+ |
|
91 | 98 |
while @running |
92 | 99 |
begin |
93 | 100 |
agents = Agents::TwitterStreamAgent.active.all |